home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 22 / Amiga Format AFCD22 (Jan 1998, Issue 106).iso / -seriously_amiga- / shareware / hardware / a500ide / software / atid600.h < prev    next >
Text File  |  1997-11-05  |  3KB  |  91 lines

  1. #define TF_BASE 0xDA0000
  2. #define WORD_WIDE unsigned short int
  3. #define BYTE_WIDE unsigned char
  4. #define REG_INC 4
  5. #define CS0 0x0000
  6. #define CS1 0x8000
  7. #define Y 0
  8.  
  9. #define TF_DATA     (*(volatile WORD_WIDE *)(TF_BASE+ 0x0 * REG_INC + CS0))
  10. #define TF_DATA_8BIT (*(volatile BYTE_WIDE *)(Y+TF_BASE+ 0x0 * REG_INC + CS0))
  11. #define TF_ERROR    (*(volatile BYTE_WIDE *)(Y+TF_BASE+ 0x1 * REG_INC + CS0))
  12. #define TF_FEATURES (*(volatile BYTE_WIDE *)(Y+TF_BASE+ 0x1 * REG_INC + CS0))
  13. #define TF_SECTOR_COUNT  (*(BYTE_WIDE *)(Y+TF_BASE+ 0x2 * REG_INC + CS0))
  14. #define TF_SECTOR_NUMBER (*(BYTE_WIDE *)(Y+TF_BASE+ 0x3 * REG_INC + CS0))
  15. #define TF_CYLINDER_LOW  (*(BYTE_WIDE *)(Y+TF_BASE+ 0x4 * REG_INC + CS0))
  16. #define TF_CYLINDER_HIGH (*(BYTE_WIDE *)(Y+TF_BASE+ 0x5 * REG_INC + CS0))
  17. #define TF_DRIVE_HEAD    (*(BYTE_WIDE *)(Y+TF_BASE+ 0x6 * REG_INC + CS0))
  18. #define TF_STATUS  (*(volatile BYTE_WIDE *)(Y+TF_BASE+ 0x7 * REG_INC + CS0))
  19. #define TF_COMMAND (*(volatile BYTE_WIDE *)(Y+TF_BASE+ 0x7 * REG_INC + CS0))
  20. #define TF_ALTERNATE_STATUS\
  21.                    (*(volatile BYTE_WIDE *)(Y+TF_BASE+ 0x6 * REG_INC + CS1))
  22. #define TF_DEVICE_CONTROL TF_ALTERNATE_STATUS
  23. #define TF_DRIVE_ADDRESS\
  24.            (*(volatile BYTE_WIDE *)(TF_BASE+ 0x7 * REG_INC + CS1))
  25.  
  26. /* Bit names for general use */
  27. #define bit7    0x80
  28. #define bit6    0x40
  29. #define bit5    0x20
  30. #define bit4    0x10
  31. #define bit3    0x08
  32. #define bit2    0x04
  33. #define bit1    0x02
  34. #define bit0    0x01
  35.  
  36. /* status register */
  37. #define BSY    bit7 /*Busy*/
  38. #define DRDY   bit6 /*drive ready*/
  39. #define DWF    bit5 /*drive write fault*/
  40. #define DF     DWF
  41. #define DSC    bit4 /*drive seek complete*/
  42. #define SKC    DSC  
  43. #define DRQ    bit3 /*data request*/
  44. #define CORR   bit2 /*corrected data*/
  45. #define IDX    bit1 /*index*/
  46. #define ERR    bit0 /*error*/
  47.  
  48. /* device control register */
  49. #define SRST   bit2 /*software reset*/
  50. #define nIEN   bit1 /*interrupt enable*/
  51.  
  52. /* error register */
  53. #define BBK    bit7 /*bad block detected*/
  54. #define UNC    bit6 /*uncorrectable data error*/
  55. #define MC     bit5 /*media changed*/
  56. #define IDNF   bit4 /*ID Not Found*/
  57. #define ABRT   bit3 /*aborted command*/
  58. #define MCR    bit2 /*Media Change Requested*/
  59. #define TK0NF  bit1 /*Track 0 Not Found*/
  60. #define AMNF   bit0 /*Address Mark Not Found*/
  61.  
  62. /* drive / head register */
  63. #define L      bit6 /*L=0.CHS , L=1.LBA*/
  64. #define DRV    bit4 /*drive select 0=drive0*/
  65. #define DRV0   0
  66. #define DRV1   DRV
  67. #define HS3    bit3 /* Head select / LBA bits 24-27*/
  68. #define HS2    bit2 /**/
  69. #define HS1    bit1
  70. #define HS0    bit0
  71.  
  72. /* commands */
  73. #define ATA_IDENTIFY_DRIVE 0xEC
  74. #define ATA_EXECUTE_DRIVE_DIAGNOSTIC 0x90
  75. #define ATA_SLEEP  0xE6
  76. #define ATA_SEEK 0x70
  77. #define ATA_READ_SECTORS 0x20
  78. #define ATA_WRITE_SECTORS 0x30
  79. #define ATA_NOP 0
  80. #define ATA_IDLE 0xE3 /*0x97*/
  81. #define ATA_IDLE_IMMEDIATE 0xE1 /*0x95*/
  82. #define ATA_STANDBY_IMMEDIATE 0xE0
  83. #define ATA_INIIIALIZE_DRIVE_PARAMETERS 0x91
  84. #define ATA_SET_FEATURES 0xEF
  85. #define ATA_CHECK_POWER_MODE 0xE5
  86.  
  87. /* features */
  88. #define FEATURE_8BIT_ON    0x01
  89. #define FEATURE_8BIT_OFF   0x81
  90.  
  91.